package models

import (
	"github.com/beego/beego/v2/client/orm"
)

// VenueType 场地类型模型
type VenueType struct {
	BaseModel
	Name      string `orm:"size(50)" json:"name"`         // 场地类型名称
	SortOrder int    `orm:"default(0)" json:"sort_order"` // 排序
	Status    int8   `orm:"default(1)" json:"status"`     // 状态：1-启用，0-禁用
}

// TableName 设置表名
func (v *VenueType) TableName() string {
	return "ss_venue_type"
}

// GetAllVenueTypes 获取所有场地类型
// 如果franchiseId > 0，则只返回该加盟商的场地类型
func GetAllVenueTypes(franchiseId int64) ([]*VenueType, error) {
	o := orm.NewOrm()
	var venueTypes []*VenueType
	qs := o.QueryTable(new(VenueType)).Filter("is_deleted", 0)

	// 如果指定了加盟商ID，则只返回该加盟商的场地类型
	if franchiseId > 0 {
		qs = qs.Filter("franchise_id", franchiseId)
	}

	_, err := qs.OrderBy("sort_order", "-id").All(&venueTypes)
	return venueTypes, err
}

// CreateVenueType 创建场地类型
func CreateVenueType(venueType *VenueType) (int64, error) {
	o := orm.NewOrm()
	id, err := o.Insert(venueType)
	return id, err
}

// UpdateVenueType 更新场地类型
func UpdateVenueType(venueType *VenueType, fields ...string) error {
	o := orm.NewOrm()
	_, err := o.Update(venueType, fields...)
	return err
}

// DeleteVenueType 删除场地类型（软删除）
func DeleteVenueType(id int64) error {
	o := orm.NewOrm()
	venueType := &VenueType{BaseModel: BaseModel{Id: id}}
	if err := o.Read(venueType); err != nil {
		return err
	}
	venueType.IsDeleted = 1
	_, err := o.Update(venueType, "IsDeleted")
	return err
}

// GetVenueTypesByStoreId 根据门店ID获取场地类型
func GetVenueTypesByStoreId(storeId int64) ([]*VenueType, error) {
	o := orm.NewOrm()
	var venueTypes []*VenueType

	// 查询场地类型
	_, err := o.QueryTable(new(VenueType)).
		Filter("is_deleted", 0).
		Filter("store_id", storeId).
		OrderBy("sort_order", "-id").
		All(&venueTypes)

	return venueTypes, err
}

// GetVenueTypesByIds 根据ID列表获取场地类型
func GetVenueTypesByIds(ids []int64) ([]*VenueType, error) {
	o := orm.NewOrm()
	var venueTypes []*VenueType
	_, err := o.QueryTable(new(VenueType)).Filter("id__in", ids).Filter("is_deleted", 0).All(&venueTypes)
	return venueTypes, err
}

// GetVenueTypeById 根据ID获取场地类型
func GetVenueTypeById(id int64) (*VenueType, error) {
	venueType := &VenueType{BaseModel: BaseModel{Id: id}}
	o := orm.NewOrm()
	err := o.Read(venueType)
	return venueType, err
}
